# DDLAppender.java

    package org.codefilarete.stalactite.sql.ddl;

    import org.codefilarete.tool.StringAppender;
    import org.codefilarete.stalactite.sql.ddl.structure.Column;
    import org.codefilarete.stalactite.sql.ddl.structure.Table;
    import org.codefilarete.stalactite.query.builder.DMLNameProvider;

    /**
     * A {@link StringAppender} that automatically appends {@link Table} and {@link Column} names
     */
    public class DDLAppender extends StringAppender {

    	protected final DMLNameProvider dmlNameProvider;

    	public DDLAppender(DMLNameProvider dmlNameProvider, Object... o) {
    		this.dmlNameProvider = dmlNameProvider;
    		cat(o);
    	}

    	public DDLAppender(StringBuilder delegate, DMLNameProvider dmlNameProvider, Object... o) {
    		super(delegate);
    		this.dmlNameProvider = dmlNameProvider;
    		cat(o);
    	}

    	/**
    	 * Overridden to append {@link Table} and {@link Column} names according to {@link DMLNameProvider} given at construction time
    	 *
    	 * @param o any object
    	 * @return this
    	 */
    	@Override
    	public StringAppender cat(Object o) {
    		if (o instanceof Table) {
    			return super.cat(dmlNameProvider.getName((Table) o));
    		} else if (o instanceof Column) {
    			return super.cat(dmlNameProvider.getSimpleName((Column) o));
    		} else {
    			return super.cat(o);
    		}
    	}
    }